#!/bin/bash
#nginx中打开access_log的配置即access_log logs/access.log main
#在ngnix的conf目录下创建一个blockip.conf文件,在nginx中配置include blockips.conf;(举例:deny 1.2.3.4;)

#不能把别人IP一直封着吧，这里就清除掉了
echo "" > /usr/local/nginx/conf/blockip.conf
#前面最开始编写的统计数据功能
#awk '{print $1}' access.log  取出access.log的第一列即为ip。
#sort | uniq -cd 去重和排序
#awk '{if($1>60)print $0}' 判断重复的数量是否超过60个，超过60个就展示出来
ip_list=$(awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}')
#判断这个变量是否为空
if test -z "$ip_list"
then
        #为空写入 11.log中，并重新启动ngnix
        echo "为空"  >> /usr/local/nginx/logs/11.log
        /usr/local/nginx/sbin/nginx -s reload
else
        #如果不为空 前面加上 deny格式和ip写入blockip.conf中
        echo "deny" $ip_list > /usr/local/nginx/conf/blockip.conf
        #因为前面携带了行数，所有我们需要去除掉前面的行数，写入后在读取一次
        ip_list2=$(awk '{print $3}' /usr/local/nginx/conf/blockip.conf)
        #最后再把读取出来的值，在次写入到blockip.conf中
        echo "deny" $ip_list2";"> /usr/local/nginx/conf/blockip.conf
        #重启ngnix
        /usr/local/nginx/sbin/nginx -s reload
        #清空之前的日志，从最新的开始截取
        echo "" > /usr/local/nginx/logs/access.log

fi

##配置计时器
#
#crontab -e 
#* * * * * cd /usr/local/nginx/logs/ && sh ip_auto_deny_ip  每一分钟运行一次
##systemctl restart crond.service 重启一下配置既可